package com.example.utils.dto;

import com.example.utils.constant.AirwallexConstant;
import lombok.Data;

/**
 * @Description: 创建付款单请求参数
 * @Auther: Swain
 * @Date: 2021/4/12 16:00
 * @Version 1.0.0
 */
@Data
public class PaymentCreateParamDTO {
    /**
     * 收款人
     */
    private Beneficiary beneficiary;
    /**
     * 支付金额
     */
    private String payment_amount;
    /**
     * 支付货币 AUD, CAD, CNY, EUR ...
     */
    private String payment_currency;
    /**
     * 写死 "SWIFT" 付款方式，即SWIFT，LOCAL
     */
    private String payment_method;
    /**
     * 必填 "wages_salary" 付款的原因 wages_salary，other_services ...
     */
    private String reason;
    /**
     * 必填 备注、参考，将在与银行进行的付款交易中显示给受益人
     */
    private String reference;
    /**
     * 必填 学员id 客户端指定的唯一请求ID。具有相同request_id的付款请求将被忽略。如果客户端不确定结果（例如由于网络问题，系统故障等），这将允许重播请求。注意：只要在请求之间是唯一的，就可以是非UUID
     */
    private String request_id;
    /**
     * 来源货币 "CNY" AUD, CAD, CNY ...
     */
    private String source_currency;
    /**
     * Swfit手续费付款方式 填写：PAYER
     */
    private String swift_charge_option;
    /**
     * 手续费付款方式 填写：PAYER
     */
    private String fee_paid_by;

    // 收款人
    @Data
    public static class Beneficiary {

        /**
         * 地址
         */
        private AddressOfBeneficiary address;
        /**
         * 银行信息
         */
        private Bank_details bank_details;
        /**
         * 收款人类型 "PERSONAL" PERSONAL，COMPANY
         */
        private String entity_type;
        /**
         * 姓
         */
        private String first_name;
        /**
         * 名
         */
        private String last_name;
    }

    // 收款人地址
    @Data
    public static class AddressOfBeneficiary {

        /**
         * 城市
         */
        private String city;
        /**
         * 国家编码 AC, AD, AE, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE,
         * BF, BG, BH, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BU, BV, BW, BZ, CA, CC, CH, CI, CK, CL,
         * CM, CN, CO, CP, CR, CS, CV, CW, CX, CY, CZ, DE, DG, DJ, DK, DM, DO, DZ, EA, EC, EE, EG,
         * EH, ES, ET, EU, EZ, FI, FJ, FK, FM, FO, FR, FX, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM,
         * GN, GP, GQ, GR, GS, GT, GU, GY, HK, HM, HN, HR, HT, HU, IC, ID, IE, IL, IM, IN, IO, IS,
         * IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KR, KW, KY, KZ, LA, LC, LI, LK, LS, LT, LU,
         * LV, MA, MC, MD, ME, MF, MG, MH, MK, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ,
         * NA, NC, NE, NF, NG, NL, NO, NP, NR, NT, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN,
         * PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, SA, SB, SC, SE, SF, SG, SH, SI, SJ, SK, SM, SN,
         * SR, ST, SU, SV, SX, SZ, TA, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TP, TR, TT, TV,
         * TW, TZ, UA, UG, UK, UM, US, UY, UZ, VA, VC, VG, VI, VN, VU, WF, WS, XK, YT, YU, ZA, ZM,
         * ZR
         */
        private String country_code;
        /**
         * 邮编
         */
        private String postcode;
        /**
         * 地区
         */
        private String state;
        /**
         * 街道
         */
        private String street_address;

    }

    // 收款人银行信息
    @Data
    public static class Bank_details {

        /**
         * 账户币种 AUD，CAD，CNY，EUR，GBP，HKD，IDR，INR，JPY，MYR，NZD，PHP，SGD，THB，USD，VND，CHF，KRW，BDT，LKR，TRY，PKR，NPR，DKK，NOK，SEK，CZK，HUF，HRK，RON，PLN
         */
        private String account_currency;
        /**
         * 收款人账户名称
         */
        private String account_name;
        /**
         * 帐号（主要用于非欧洲国家/地区），应填写account_number或iban
         */
        private String account_number;
        /**
         * 地区代码 AD，AE，AG，AI，AL，AM，AN，AO，AR，AT，AU，AW，AZ，BA，BD，BE，BG，BH，BO，BR，BZ，CA，CH，CL，CN，CO，CR，CW，CY，CZ，DE，DK，DM，DO，DZ，EC，EE，EG，ES，FI，FJ，FR，GB，GD，GE，GG，GI，GQ，GR，GT，GY，HK，HN，HR，HU，ID，IE，IL，IM，IN，IS，IT，JE，JM，JO，JP，KE，KG，KH，KR，KZ，KW，LI，LK，LT，LU，LV，MA，MC，MD，ME，MK，MO，MQ，MT，MU，MV，MX，MY，NA，NG，NL，NO，NP，NZ，OM，PA，PE，PF，PH，PK，PL，PM，PR，PT，PY，QA，RO，RS，RU，SA，SC，SE，SG,
         * SI, SK, SM, SV, TH, TJ, TN, TR, TZ, TW, UA, UG, US, UY, UZ, VN, VU, YT, ZA, ZM
         */
        private String bank_country_code;
        /**
         * 收款人银行帐户的银行名称
         */
        private String bank_name;
        /**
         * swift_code
         */
        private String swift_code;
        /**
         *
         string
         International bank account number, mostly for european countries

         Alphanumeric characters only

         Should be valid and supported

         The country code in the IBAN should match the bank country code
         */
        private String iban;

    }

}
